home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Atari Mega Archive 1
/
Atari Mega Archive - Volume 1.iso
/
program
/
outtolod.lzh
/
OUTTOLOD.C
next >
Wrap
C/C++ Source or Header
|
1992-05-08
|
6KB
|
281 lines
/***************************************/
/* */
/* OUT To LOD DSP 56001 File Converter */
/* */
/* Gabriel Sebestyen - 1993 */
/* */
/***************************************/
#include <stdio.h>
#include <stdlib.h>
#include <tos.h>
#define MAXLEN 256
#define START "_START"
#define DATA "_DATA"
#define END "_END"
#define SPACE " "
#define ENTER "\r\n"
#define PMEM "P"
#define XMEM "X"
#define YMEM "Y"
#define NAME "TEST"
#define DSP "DSP56001 4.1.1"
#define FOURNULL "0000"
#define MAXDATAS 8
char *String[ MAXLEN ];
int Length;
char ReadByte ( int );
void WriteByte ( int , char );
int ReadString ( int , char * );
void WriteString ( int , char * );
int CmpStr ( char * ,char * );
int StrToNum ( char * );
void main ( argc , argv )
int argc;
char *argv[];
{
char *Fname ,*Fmem;
char *From;
int TstLen = 0;
int Rhandle ,Whandle;
int ActAddr = 0;
int NewAddr;
char *ActMem = "x";
int LineCounter = 0;
char *String = " ";
int Status = 0;
if ( argc < 2 || *argv[1] == '?' )
{
printf ( ".OUT to .LOD Converter v01\n" );
printf ( "Written By Gabriel Sebestyen\n" );
printf ( "Input: .OUT DSP-ASCII file made by A56.TTP\n" );
printf ( "Output: .LOD file ... \n" );
getch ();
exit ( 1 );
}
Fmem = Malloc ( 100 );
Fname = Fmem;
From = argv[1];
while ( *From != 0x0000 )
{
*Fname++ = *From++ ;
TstLen ++;
}
while ( *Fname != '.' || TstLen-- == 0x0000 )
Fname--;
if ( *Fname != '.' )
{
printf ( "Wrong filename!\n" );
exit ( 1 );
}
Fname++;
*Fname++ = 'L';
*Fname++ = 'O';
*Fname++ = 'D';
*Fname++ = 0x00;
Fname = Fmem;
printf ( "Working ...\n" );
Rhandle = Fopen ( argv[1] , 0 );
if ( Rhandle < 0 )
{
printf ( "Can't open file %s !\n" ,argv[1] );
exit ( 1 );
}
Whandle = Fcreate ( Fname , 0 );
if ( Whandle < 0 )
{
printf ( "Can't open file %s !\n" ,Fname );
exit ( 1 );
}
WriteString ( Whandle , START );
WriteString ( Whandle , SPACE );
WriteString ( Whandle , NAME );
WriteString ( Whandle , SPACE );
WriteString ( Whandle , FOURNULL );
WriteString ( Whandle , SPACE );
WriteString ( Whandle , FOURNULL );
WriteString ( Whandle , SPACE );
WriteString ( Whandle , FOURNULL );
WriteString ( Whandle , SPACE );
WriteString ( Whandle , DSP );
WriteString ( Whandle , ENTER );
while ( Status == 0 )
{
if ( ReadString ( Rhandle , String ) == -1 )
break;
if ( *String != *ActMem )
{
*ActMem = *String;
*( ActMem +1 ) = 0;
WriteString ( Whandle , ENTER );
WriteString ( Whandle , DATA );
WriteString ( Whandle , SPACE );
WriteString ( Whandle , ActMem );
WriteString ( Whandle , SPACE );
ReadString ( Rhandle , String );
WriteString ( Whandle , String );
WriteString ( Whandle , ENTER );
ActAddr = StrToNum ( String );
LineCounter = 0;
}
else
{
ReadString ( Rhandle , String );
NewAddr = StrToNum ( String );
if ( ActAddr != NewAddr )
{
ActAddr = NewAddr;
WriteString ( Whandle , ENTER );
WriteString ( Whandle , DATA );
WriteString ( Whandle , SPACE );
WriteString ( Whandle , ActMem );
WriteString ( Whandle , SPACE );
WriteString ( Whandle , String );
WriteString ( Whandle , ENTER );
LineCounter = 0;
}
}
ReadString ( Rhandle , String );
WriteString ( Whandle , String );
if ( LineCounter == 7 )
{
WriteString ( Whandle , ENTER );
LineCounter = 0;
}
else
{
WriteString ( Whandle , SPACE );
LineCounter++;
}
ActAddr++;
}
WriteString ( Whandle , ENTER );
WriteString ( Whandle , END );
WriteString ( Whandle , SPACE );
WriteString ( Whandle , FOURNULL );
WriteString ( Whandle , ENTER );
Fclose ( Whandle );
Fclose ( Rhandle );
Mfree ( Fmem );
}
char ReadByte ( Rhandle )
int Rhandle;
{
char Byte;
int Erreur;
Erreur = Fread ( Rhandle , 1 , &Byte );
if ( Erreur < 1 )
Byte = 0xFF;
return ( Byte );
}
void WriteByte ( Whandle , Byte )
int Whandle;
char Byte;
{
int Erreur;
Erreur = Fwrite ( Whandle , 1 , &Byte );
if ( Erreur < 0 )
{
printf ( "Write Error!\n" );
exit ( 1 );
}
}
int ReadString ( Rhandle , Spointer )
int Rhandle;
char *Spointer;
{
int i;
char Byte = ' ';
while ( Byte <= ' ' && Byte >= 1 )
Byte = ReadByte ( Rhandle );
if ( Byte == 0xFF )
return ( -1 );
*Spointer++ = Byte;
for ( i = 0 ; i < MAXLEN ; i++)
{
Byte = ReadByte ( Rhandle );
if ( Byte == 0xFF )
return ( -1 );
if ( Byte > ' ' )
*Spointer++ = Byte;
else
break;
}
*Spointer++ = 0x00;
return ( 0 );
}
void WriteString ( Whandle , Spointer )
int Whandle;
char *Spointer;
{
while ( *Spointer != 0x00 )
WriteByte ( Whandle , *Spointer++ );
}
int CmpStr ( String1 , String2 )
char *String1 , *String2;
{
int Len = 0x0000;
while ( *String1++ == *String2 ++ )
Len++;
return ( Len );
}
int StrToNum ( String1 )
char *String1;
{
int number = 0;
unsigned int hexa = 1;
char byte;
int counter = 0;
while ( *String1++ != 0x00 )
counter++;
if ( counter == 0 )
return ( 0 );
String1--;
String1--;
while ( counter-- > 0 )
{
byte = *String1--;
if ( byte >= '0' && byte <= '9' )
number += ( byte - '0' ) * hexa;
else if ( byte >= 'A' && byte <= 'F' )
number += ( ( byte - 'A' ) + 10 ) * hexa;
hexa *= 16;
}
return ( number );
}